﻿using System;
using System.Web.Mvc;
using CodeSaude.Application.Interfaces;
using CodeSaude.Application.ViewModels;
using CodeSaude.Domain.Enums;
using CodeSaude.Infrastructure.CrossCutting.Util;
using CodeSaude.Web.Models;

namespace CodeSaude.Web.Controllers
{

    public class AntecedenteController : Controller
    {
        private readonly IAntecedenteApplicationService _antecedenteApplication;
        private readonly Mensagem _msg;

        public AntecedenteController(IAntecedenteApplicationService antecedenteApplication, Mensagem msg)
        {
            _antecedenteApplication = antecedenteApplication;
            _msg = msg;
        }

        public ActionResult Index()
        {
            ViewBag.TituloPagina = "Antecedente";
            if (Session["mensagem"] != null)
            {
                ViewBag.mensagem = Session["mensagem"] as Mensagem;
            }
            return View(_antecedenteApplication.GetAll());
        }

        public ActionResult Create()
        {
            ViewBag.TituloModal = "Inserir Antecedente";
            var model = new AntecedenteViewModel()
            {
                ListaSituacoes = EnumUtil.GetEnumSelectList<SituacaoEnum>(1)
            };
            return View("CreateEdit", model);
        }

        [HttpPost]
        public ActionResult Create(AntecedenteViewModel model)
        {
            try
            {
                if (!ModelState.IsValid) return RedirectToAction("Index");
                _antecedenteApplication.Add(model);

                _msg.Conteudo = "Antecedente cadastrado com sucesso";
                _msg.tipoMensagem = TipoMensagem.SUCESSO;

                Session["mensagem"] = _msg;

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                _msg.Conteudo = string.Concat("Erro ao salvar Antecedente. Detalhes: ", ex.Message);
                _msg.tipoMensagem = TipoMensagem.ERRO;
                Session["mensagem"] = _msg;
                return RedirectToAction("Index");
            }
        }

        public ActionResult Edit(int id)
        {
            try
            {
                ViewBag.TituloModal = "Alterar Antecedente";
                var model = _antecedenteApplication.GetById(id);
                model.ListaSituacoes = EnumUtil.GetEnumSelectList<SituacaoEnum>(1);
                return View("CreateEdit", model);
            }
            catch (Exception)
            {
                _msg.Conteudo = "Não foi possível carregar o Antecedente";
                _msg.tipoMensagem = TipoMensagem.ERRO;
                Session["mensagem"] = _msg;
                return RedirectToAction("Index");
            }
        }

        [HttpPost]
        public ActionResult Edit(AntecedenteViewModel model)
        {
            try
            {
                if (!ModelState.IsValid) return RedirectToAction("Index");
                _antecedenteApplication.Update(model);
                _msg.Conteudo = "Antecedente alterado com sucesso";
                _msg.tipoMensagem = TipoMensagem.SUCESSO;
                Session["mensagem"] = _msg;
                return RedirectToAction("Index");
            }
            catch
            {
                _msg.Conteudo = "Erro ao alterar Antecedente";
                _msg.tipoMensagem = TipoMensagem.ERRO;
                Session["mensagem"] = _msg;
                return RedirectToAction("Index");
            }
        }

        [HttpPost]
        public ActionResult Excluir(int id)
        {
            try
            {
                _antecedenteApplication.Remove(_antecedenteApplication.GetById(id));
                _msg.Conteudo = "Antecedente excluído com sucesso";
                _msg.tipoMensagem = TipoMensagem.SUCESSO;
                Session["mensagem"] = _msg;
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                _msg.Conteudo = string.Concat("Erro ao excluir Antecedente. Detalhes: ", ex.Message);
                _msg.tipoMensagem = TipoMensagem.ERRO;
                Session["mensagem"] = _msg;
                return RedirectToAction("Index");
            }
        }
    }


    //public class AntecedenteController : Controller
    //{
    //    private readonly IAntecedenteApplicationService _antecedenteApplication;
    //    private readonly Mensagem _msg;

    //    public AntecedenteController(IAntecedenteApplicationService antecedenteApplication, Mensagem msg)
    //    {
    //        _antecedenteApplication = antecedenteApplication;
    //        _msg = msg;
    //    }

    //    public ActionResult Index()
    //    {
    //        ViewBag.Title = "Antecedentes";

    //        if (TempData["Mensagem"] == null) return View(_antecedenteApplication.FindAll());
    //        ViewBag.Mensagem = TempData["Mensagem"] as Mensagem;

    //        return View(_antecedenteApplication.FindAll());
    //    }

    //    public ActionResult Create()
    //    {
    //        ViewBag.Title = "Inserir Antecedente";
    //        var model = new AntecedenteViewModel()
    //        {
    //            ListaSituacoes = EnumUtil.GetEnumSelectList<SituacaoEnum>(1)
    //        };

    //        return View("CreateEdit", model);
    //    }

    //    [HttpPost]
    //    public ActionResult Salvar(AntecedenteViewModel model)
    //    {
    //        try
    //        {
    //            if (!ModelState.IsValid) return RedirectToAction("Index");
    //            string acao;

    //            if (model.AntecedenteId == 0)
    //            {
    //                _antecedenteApplication.Create(model);
    //                acao = "cadastrado";
    //            }
    //            else
    //            {
    //                _antecedenteApplication.Update(model);
    //                acao = "alterado";
    //            }

    //            _msg.Conteudo = string.Format("Antecedente {0} com sucesso", acao);
    //            _msg.tipoMensagem = TipoMensagem.SUCESSO;

    //            TempData["Mensagem"] = _msg;

    //            return RedirectToAction("Index");
    //        }
    //        catch (Exception ex)
    //        {
    //            _msg.Conteudo = string.Concat("Erro ao salvar antecedente. Detalhes: ", ex.Message);
    //            _msg.tipoMensagem = TipoMensagem.ERRO;

    //            TempData["Mensagem"] = _msg;
    //            return RedirectToAction("Index");
    //        }
    //    }

    //    public ActionResult Edit(int id)
    //    {
    //        try
    //        {
    //            ViewBag.Title = "Alterar Antecedente";
    //            AntecedenteViewModel model = _antecedenteApplication.FindAntecedenteById(id);
    //            model.ListaSituacoes = EnumUtil.GetEnumSelectList<SituacaoEnum>(1);
    //            return View("CreateEdit", model);
    //        }
    //        catch (Exception)
    //        {
    //            _msg.Conteudo = "Não foi possível carregar o antecedente";
    //            _msg.tipoMensagem = TipoMensagem.ERRO;
    //            TempData["mensagem"] = _msg;
    //            return RedirectToAction("Index");
    //        }
    //    }

    //    [HttpPost]
    //    public ActionResult Delete(int id)
    //    {
    //        try
    //        {
    //            var antecedente = _antecedenteApplication.FindAntecedenteById(id);
    //            _antecedenteApplication.Delete(antecedente);

    //            _msg.Conteudo = "Antecedente excluído com sucesso";
    //            _msg.tipoMensagem = TipoMensagem.SUCESSO;

    //            Session["Mensagem"] = _msg;
    //            return RedirectToAction("Index");
    //        }
    //        catch (Exception ex)
    //        {
    //            _msg.Conteudo = string.Concat("Erro ao excluir antecedente. Detalhes: ", ex.Message);
    //            _msg.tipoMensagem = TipoMensagem.ERRO;
    //            TempData["Mensagem"] = _msg;
    //            return RedirectToAction("Index");
    //        }
    //    }
    //}
}
